<?php
/**
 * ECommentoFoto.php
 * @author mw
 * @package Entity
 *
 */
/**
 * ECommentoFoto
 * @author mw
 * @package Entity
 *
 */
class ECommentoFoto extends EEntity implements JSONSerializable {
	/**
	 * Lo scrittore del commento
	 * @var string $writer
	 */
	private $writer;
	/**
	 * La data e l'ora in cui viene pubblicato il commento
	 * @var timestamp $timestamp
	 */
	private $timestamp;
	/**
	 * Il commento scritto dall'utente
	 * @var Commento $commento
	 */
	private $commento;
		/**
	 * L'id della foto
	 * @var int $fotoid
	 */
	private $fotoid;
	/**
	 * Costruttore
	 */
	public function __construct() {
		parent::__construct();
	}
	/**
	 * setWriter
	 * @param string $username
	 * @throws ExceptionDati
	 */
	public function setWriter($username) {
		if(!preg_match(RX_USERNAME,$username)){
			throw new ExceptionDati('Campo writer non corretto!');
		}
		$this->writer = $username;
	}
	/**
	 * setCommento
	 * @param string $commento
	 * @throws ExceptionDati
	 */
	public function setCommento($commento){
		if(empty($commento)){
			throw new ExceptionDati('Campo commento vuoto!');
		}
		$this->commento = $commento;
	}
	/**
	 * setId
	 * @param int $fotoid
	 * @throws ExceptionDati
	 */
	public function setFotoId($fotoid){
		if(empty($fotoid)){
			throw new ExceptionDati('Campo id vuoto!');
		}
		$this->fotoid = $fotoid;
	}
	
	/**
	 * setTimestamp
	 * @param timestamp $timestamp
	 * @throws ExceptionDati
	 */
	public function setTimestamp($timestamp){
		$this->timestamp = $timestamp;
	}
	/**
	 * getWriter
	 * @return string
	 */
	public function getWriter() {
		return $this->writer;
	}
	/**
	 * getTimestamp
	 * @return timestamp
	 */
	public function getTimestamp() {
		return $this->timestamp;
	}
	/**
	 * getCommento
	 * @return string
	 */
	public function getCommento() {
		return $this->commento;
	}
	/**
	 * getId
	 * @return int
	 */
	public function getFotoId() {
		return $this->fotoid;
	}
	/**
	 * Restituisce la classe come un array associativo
	 * @return array
	 */
	public function toArray() {
		$result = array();
		foreach($this as $key => $value) {
			$result[$key] = $value;
		}
		return $result;
	}
	/**
	 * jsonEncode
	 * 
	 * Ritorna un oggetto in json della classe
	 * @return string
	 */
	public function jsonEncode() {
		
		$result = '{';
		
		$i = 0;
		foreach($this as $key => $value) {
			
			if($i != 0){
				$result .= ',';
			}
			
			$result .= JSON_encode($key).':'.JSON_encode($value);
			$i++;
		}
		
		$result .= '}';
		
		return $result;
	}
	/**
	 * jsonDecode
	 * 
	 * Prende un oggetto json e popola i metodi della Classe.
	 * @param stdClass $json
	 */
	public function jsonDecode($json){
		
		foreach($json as $key => $value){
			$this->{'set'.$key}($value);
		}
		
	}
}